
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>现在有一个未分库分表的系统，未来要分库分表，如何设计才可以让系统从未分库分表动态切换到分库分表上？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>现在有一个未分库分表的系统，未来要分库分表，如何设计才可以让系统从未分库分表动态切换到分库分表上？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">核心思想</div>
          <div class="card-question">为了让一个未分库分表的系统能够平滑地切换到分库分表架构，其设计的核心关键点是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">核心思想</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">核心关键在于设计一个灵活的抽象层。这个抽象层能够隐藏分库分表的复杂性，实现动态路由和数据迁移，从而为系统从未分库分表的架构平滑地切换到分库分表架构做好准备。</div>
          </div>
          <div class="card-source">来源: 文档引言及第3章节「实现分库分表的抽象层」</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">在规划分片策略时，选择“分片键”（Sharding Key）的目的是什么？请根据文档举例说明。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">选择合适的分片键是为了决定数据如何进行分库分表，它是分片策略的核心。文档中提到的例子包括用户ID或订单ID。</div>
          </div>
          <div class="card-source">来源: 1. 需求分析与规划</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">在数据访问层实现抽象层有什么主要好处？它在分库分表切换中扮演了什么角色？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">主要好处是隐藏分库分表的复杂性，并提供统一的数据库访问接口。在未来切换时，只需修改抽象层，而无需大规模改动应用代码，从而确保了应用程序与数据库交互的一致性。</div>
          </div>
          <div class="card-source">来源: 3. 实现分库分表的抽象层</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">文档中提到的“动态路由”功能是如何在分库分表架构中工作的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">动态路由功能会根据请求中的分片键，在运行时动态地选择并路由到正确的数据库实例和对应的表中。</div>
          </div>
          <div class="card-source">来源: 3. 实现分库分表的抽象层</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">为降低从单体数据库切换到分库分表架构的风险，文档推荐了哪种发布策略？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档推荐采用灰度发布策略。该策略通过将部分流量先切换到新架构中进行监控和验证，之后再决定是否全面切换，从而逐步完成切换过程。</div>
          </div>
          <div class="card-source">来源: 5. 逐步切换与回滚策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在数据迁移过程中，如何确保旧系统与新的分片架构之间的数据一致性？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">需要在迁移过程中实施实时数据同步机制，确保新旧系统数据保持一致。迁移完成后，还应进行数据一致性检查以验证数据的正确性。</div>
          </div>
          <div class="card-source">来源: 4. 数据迁移与同步</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">设计</div>
          <div class="card-question">根据文档，设计分库和分表时可以分别采用哪些不同的策略？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">设计</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">分库策略可以按地域或业务类型来划分；分表策略则可以按时间范围或数据量等进行划分。</div>
          </div>
          <div class="card-source">来源: 2. 设计分库分表架构</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">运维</div>
          <div class="card-question">系统切换到分库分表架构后，需要重点监控哪些关键性能指标以进行持续优化？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">运维</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">需要重点监控的关键性能指标包括：查询响应时间、数据库负载和数据同步延迟等。</div>
          </div>
          <div class="card-source">来源: 7. 监控与优化</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">风险管理</div>
          <div class="card-question">在实施切换的过程中，如果新架构出现严重问题，应该采取什么预案？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">风险管理</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">应该执行预先制定的回滚策略，以便在切换过程中出现问题时，可以快速回退到旧的、未分库分表的架构。</div>
          </div>
          <div class="card-source">来源: 5. 逐步切换与回滚策略</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
